

/*     Programa que simula el funcionamiento del FSW en modo de monitoreo para obtener los datos
       de la una memoria EEPROM    */

#include <Wire.h>     

       
char SerialByte = 0;
char I2CByte = 0;

char enableRead = 0;

char EepromAddress = 0x50;

void setup(){
  
    Serial.begin(9600);
    // Inicializar bus I2C como maestro
    Wire.begin();
        

}


void loop(){
    int counter = 0;
    char dato;

    if(Serial.available()){
      
        SerialByte = Serial.read();
        switch (SerialByte){
            
            case 'M':
                enableRead = 1;
                //Serial.println("Hola");
                Serial.print("Monitoreo");
                Serial.write(0x0D);
                break;
            case 'O':
            
                //Serial.println(" Leer Memoria ");
                if(enableRead){                    
                    direccionarMemoria(0);
                    
                    for(counter = 0; counter <= 0x3FFF; counter ++){
                      
                        //Serial.print("Pidiendo byte : ");
                        //Serial.println(counter);
                        // Leer un byte de memoria
                        Wire.requestFrom(EepromAddress,1);
                        // Esperar a recibir el byte
                        while(! (Wire.available()));
                        // Recibir el byte
                        if(Wire.available()){
                            I2CByte = Wire.read();
                        }
                        //Enviar por UART
                        Serial.write(I2CByte);                      
                    }   
              
                    Serial.write(0x0A);
                    Serial.write(0x0D);      
                }
                break;
            default:
                break;    
        }    
    }
}

void direccionarMemoria(char address){
  
    Wire.beginTransmission(EepromAddress);
    Wire.write(address);
    Wire.write(address);
    Wire.endTransmission();     


}
